import { ListMyApply, ListStuApply } from "../../../utils/data/apis";
import { event } from "../../../utils/interface";
import msg from "../../../utils/model/msg";

// pages/individual/apply/index.ts
const applyData: Array<{detail: any, info: any, type: string}> = []; // 该用户所有状态的报名信息
Page({

  /**
   * 页面的初始数据
   */
  data: {
    applyData: '', // 筛选后的结果
    type: '全部', // 当前显示的类型
    id_flag: '', // 用户身份
    TeaForStu: false, //导师是否点击学生报名
  },
  /**
   * @function 筛选类型改变
   */
  typeChange: function(e: event | {detail: {type: string}}) {
    const type: string = e.detail.type;
    if(type == '全部') {
      const tmp: any = applyData; // 该用户所有状态的报名信息
      this.setData({
        applyData: tmp,// 筛选后的结果
        type: e.detail.type
      })
      return;
    }
    const res: any = applyData.filter(item => {
      if(type == '报名失败') {
        return item.type == '订单取消' || item.type == '报名失败' || item.type == '正在退款' || item.type == '报名取消';
      }
      else if (type == '已完成') {
        return item.type == '已退款' || item.type == '已完成';
      }
      return item.type == type;
    })
    this.setData({
      applyData: res,
      type: e.detail.type,
    })
    console.log('result', this.data.applyData)
    return;
  },
  /**
   * @function 判断报名类型
   * @param status 后台返回的报名状态码
   * @param payendTime 报名支付截止时间
   * @param endTime 活动结束时间
   */
  getType: function(status: string, payendTime: string, endTime: string): string {
    switch (status) {
      case '1':
        return this.data.id_flag == 'teacher' ? '报名取消' : '订单取消';
      case '2':
        if(this.data.id_flag == 'teacher') {
          return '审核中';
        }
        if((new Date(payendTime)) > (new Date())) {
          // 支付仍未截止
          return '待付款';
        }
        else {
          // 支付已超时
          return '报名失败';
        }
      case '3':
        if((new Date(endTime)) > (new Date())) {
          // 活动未结束
          return '报名成功';
        }
        else {
          // 活动已结束
          return '已完成';
        }
      case '4':
        return '正在退款';
      default:
        return '已退款';
    }
  },
  /**
   * @function 获取报名数据
   */
  listMyApply: function() {
    applyData.splice(0, applyData.length); // 清空原有数组
    const id = wx.getStorageSync('user').id; // 获取用户信息id
    const id_flag = wx.getStorageSync('id_flag'); // 获取用户身份
    var TeaForStu = this.data.TeaForStu;
    if(!id || !id_flag) {
      msg.Modal('登录以查看更多')
      .then(res => {
        wx.switchTab({
          url: '../index',
        })
      })
      return;
    }
    this.setData({
      id_flag: id_flag
    })
    if (id_flag == "parent") {
      wx.setNavigationBarTitle({
        title: '孩子报名'
      })
    }
    if (id_flag == "teacher" && TeaForStu) {
      wx.setNavigationBarTitle({
        title: '学生报名'
      })
    }
    if(!(id_flag == 'teacher' && TeaForStu)) {
      msg.Loading();
      ListMyApply({
        identity: id_flag,
        id: id,
      })
      .then((res: any) => {
        console.log("ListMyApply",res);
        const detail: Array<{[key: string]: any}> = [];
        const info: Array<{[key: string]: any}> = [];
        if(id_flag == 'parent') {
          const originData: Array<{data1: Array<any>, data2: Array<any>}> = res.data.data.data;
          originData.forEach((item: {data1: Array<any>, data2: Array<any>}) => {
            Array.prototype.push.apply(detail, item.data1);
            Array.prototype.push.apply(info, item.data2);
          })
        }
        else {
          Array.prototype.push.apply(detail, res.data.data1)
          Array.prototype.push.apply(info, res.data.data2)
        }
        // 合并
        for(var i in info) {
          applyData.push({
            detail: detail[i],
            info: info[i],
            type: this.getType(detail[i].status, detail[i].payendTime, info[i].endTime),
          })
        }
        this.typeChange({detail: {type: this.data.type}});
        msg.HideLoading();
      }) // ListApply 成功回调
      .catch(() => {
        msg.HideLoading();
        msg.Fail('加载数据出错');
      })
      return;
    }
    else{//导师端点击学生报名
      msg.Loading();
      ListStuApply({
        id: id,
      })
      .then((res :any) => {
        console.log("ListStuApply res",res);
        const originData: Array<{data1: Array<any>, data2: Array<any>}> = res.data.data.data;
        const detail: Array<{[key: string]: any}> = [];
        const info: Array<{[key: string]: any}> = [];
        originData.forEach((item: {data1: Array<any>, data2: Array<any>}) => {
          Array.prototype.push.apply(detail, item.data1);
          Array.prototype.push.apply(info, item.data2);
        })
        // 合并
        for(var i in info) {
          applyData.push({
            detail: detail[i],
            info: info[i],
            type: this.getType(detail[i].status, detail[i].payendTime, info[i].endTime),
          })
        }
        this.typeChange({detail: {type: this.data.type}});
        msg.HideLoading();
      })
      .catch(() => {
        msg.HideLoading();
        msg.Fail('加载数据出错');
      })

     
    }
  },
  /**
   * @function 前往报名
   */
  toCourse: function() {
    setTimeout(() => {
      wx.switchTab({
        url: '../../course/index'
      })
    }, 100)
  },
  /**
   * @function 去付款
   */
  toOrderConfirm: function(e: {detail: {courseid: string, orderid: string, userInfo: any}}) {
    const info = e.detail;
    wx.navigateTo({
      url: `../../order/confirm/index?id=${info.courseid}&orderid=${info.orderid}&userInfo=${JSON.stringify(info.userInfo)}`
    })
  },
  /**
   * @function 前往报名详情
   */
  toDetail: function(e: event) {
    const {id, id_flag} = e.detail;
    const TeaForStu = this.data.TeaForStu;
    if(!TeaForStu){
      return wx.navigateTo({
        url: `../../detail/apply/index?id=${id}&id_flag=${id_flag}`,
      })
    }
    else{
      return wx.navigateTo({
        url: `../../detail/apply/index?id=${id}&id_flag=${id_flag}&TeaForStu=${TeaForStu}`,
      })
    }
    
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(e) {
    if(e.TeaForStu){
      this.setData({
        TeaForStu: true,
      })
    }
    this.listMyApply();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.onLoad();
    setTimeout(() => {
      wx.stopPullDownRefresh();
    }, 1000)
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})